// a Genetic BubbleSort
// By Ben 02/10/2018

#include <iostream>
using namespace std;

template<typename T>
void BubbleSort(T* Items, int Size){
	bool swapped = false;
	T tmp;

	for (int i = 0; i < Size - 1; i++){
		swapped = false;
		for (int j = 0; j < Size - i - 1; j++)
		{
			if (Items[j] > Items[j + 1]){
				//Swap array items
				tmp = Items[j + 1];
				Items[j + 1] = Items[j];
				Items[j] = tmp;
				swapped = true;
			}
		}
		if (swapped = false){
			break;
		}
	}
}

void Display(int *Nums, int Size){
	for (int i = 0; i < Size; i++){
		if (i < Size-1){
			std::cout << Nums[i] << ", ";
		}
		else{
			std::cout << Nums[i];
		}
	}
	std::cout << endl;
}

int main(){

	int nums[] = { 5, 7, 2, 6, 4, 1, 3, 10, 40, 12, 13, 16, 20, 15, 17 };
	int n_size = sizeof(nums) / sizeof(int);

	//Output un-sorted
	std::cout << "Unsorted : ";
	Display(nums, n_size);

	//Sort array
	BubbleSort<int>(nums, n_size);
	//Output sorted
	std::cout << "Sorted : ";
	Display(nums, n_size);

	system("pause");
	return 0;
}